package loja.dao.impl.hibernate;

import java.math.BigDecimal;
import java.util.List;

import loja.dao.conta.ContaImplDAO;
import loja.model.conta.ContaAbstrata;
import loja.model.conta.impl.ContaPrivada;
import loja.model.conta.operacao.Operacao;

import org.hibernate.Session;

public class ContaPrivadaDAOHibernate implements ContaImplDAO {

	private Session session;
	private ContaPrivada conta;

	public ContaPrivadaDAOHibernate(Session session, ContaPrivada conta) {
		this.session = session;
		this.conta = conta;
	}

	@Override
	public void addOperacao(Operacao operacao) {
		this.conta.addOperacao(operacao);
		atualizarConta(conta);

	}

	@Override
	public List<Operacao> listarOperacoes() {
		return this.conta.listarOperacoes();
	}

	@Override
	public BigDecimal getSaldoConta() {
		BigDecimal saldo = BigDecimal.ZERO;
		for (Operacao operacao : listarOperacoes()) {
			saldo = saldo.add(operacao.getValor());
		}
		return saldo;
	}

	@Override
	public void atualizarConta(ContaAbstrata conta) {
		ContaPrivada contaPrivada = (ContaPrivada) conta;
		this.session.saveOrUpdate(contaPrivada);
	}

}
